/* *****************************************************************************
 * JFab (http://code.google.com/p/jfab)
 * Copyright (c) 2011 JFab.org
 * Admin jfab@jeffreythompson.net
 *
 * See the file "LICENSE.txt" for information on usage and redistribution of
 * this file, and for a DISCLAIMER OF ALL WARRANTIES.
 * *****************************************************************************/


package org.jfab.core.factory;

import org.jfab.core.collection.CGAnnotationList;
import org.jfab.core.collection.ParameterNameList;
import org.jfab.core.model.CGAnnotation;
import org.jfab.core.model.CGType;

import java.lang.annotation.Annotation;


/**
 * Defines methods required by a code generator annotation factory.
 */
public interface CGAnnotationFactory
{
    /**
     * @param   type  Type.
     *
     * @return  a new code generator annotation.
     */
    CGAnnotation createAnnotation(CGType type);

    /**
     * @param   annotation  Annotation.
     *
     * @return  a new code generator annotation.
     */
    CGAnnotation createAnnotation(Annotation annotation);

    /**
     * @param   type       Type.
     * @param   attribute  Attribute.
     *
     * @return  a new code generator annotation.
     */
    CGAnnotation createAnnotation(CGType type, String attribute);

    /**
     * @param   type        Type.
     * @param   attributes  Attributes.
     *
     * @return  a new code generator annotation.
     */
    CGAnnotation createAnnotation(CGType type, ParameterNameList attributes);

    /**
     * @param   annotations  Annotations.
     *
     * @return  a new list of code generator annotations.
     */
    CGAnnotationList createAnnotations(Annotation[] annotations);

    /**
     * @return  a new annotation for the override class.
     */
    CGAnnotation createOverrideAnnotation();
}
